package main

import (
	"fmt"
	"red/com.red/resk/gorotine"
	"reflect"
)

//make 返回的是引用类型
/**
创建切片
	切片:切片(slice)是 Golang 中一种比较特殊的数据结构，
		这种数据结构更便于使用和管理数据集合。切片是围绕动态数组的概念构建的，可以按需自动增长和缩小。
		切片的动态增长是通过内置函数 append() 来实现的，这个函数可以快速且高效地增长切片，也可以通过对切片再次切割，缩小一个切片的大小。
		因为切片的底层也是在连续的内存块中分配的，所以切片还能获得索引、迭代以及为垃圾回收优化的好处。
*/
func makeSlice() {
	mSlice := make([]string, 3)
	mSlice[0] = "dog"
	mSlice[1] = "cat"
	mSlice[2] = "tiger"

	fmt.Print(mSlice)
}

//创建map  其中 int 是map的key 类型  string 是map 的value
func makeMap() {
	mMap := make(map[int]string)
	mMap[111] = "cat"
	mMap[1111] = "dog"
	fmt.Print(mMap)
}

//new 返回的是指针类型
func newMap() {
	makeMap := make(map[int]string)
	newMap := new(map[int]string)
	fmt.Println(reflect.TypeOf(makeMap))
	fmt.Println(reflect.TypeOf(newMap))
}

func receivePanic() {
	defer coverPanic()
	panic("我是错误信息")
}

func coverPanic() {
	message := recover()
	switch message.(type) {
	case string:
		fmt.Println("string message:", message)
	case int:
		fmt.Println("int message:", message)
	case error:
		fmt.Println("error message:", message)
	default:
		fmt.Println("unknow message:", message)

	}

}

func main() {
	//makeSlice()
	//makeMap()
	//newMap()
	//gorotine.Loop()

	//cpu个数
	//fmt.Printf("cpu number = %d",runtime.NumCPU())
	//并发 用go关键字启动一个协程
	//runtime.GOMAXPROCS(runtime.NumCPU()-1)

	//go gorotine.Loop()
	//go gorotine.Loop()
	//time.Sleep(time.Second * 5)

	//协程通信   channel
	//go gorotine.Send()
	//go gorotine.Receive()
	//time.Sleep(time.Second * 5)

	gorotine.JsonSerialMap()
}
